草庐IT

c++ - WinAPI : Add style to combo box

全部标签

c++ - 作为函数指针的静态方法

在很多情况下,C框架使用函数指针来扩展功能和通知监听器(例如win32-api和GLUT)。在对面向对象的C++进行编程时,您更喜欢使用类和对象来处理这个问题。所以我的问题是:在C库需要函数指针的地方使用指向静态方法的指针是否安全? 最佳答案 形式上,不,你不能这样做,但在实践中,是的。要从C代码调用,C++函数必须标记为extern"C",以确保它使用C编译器期望的调用约定。无法将静态成员函数标记为extern"C",因此无法保证它可以从C代码中成功调用。我不知道哪个编译器对静态成员函数不使用与C代码相同的调用约定,所以这会起作用

c++ - C/C++ - 如何管理视频游戏中的循环?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我已经用C语言制作了一些视频游戏(小型个人项目)。而我每次遇到的问题都是一样的,如何管理游戏中的循环。例如,我用SFML编写了一条蛇。我用帧速率处理周期:正常时为5帧速率,加电后,我将其更改为10。行得通。但这太可怕了。而且它不能在坏电脑上正常工作。出于同样的想法,我还制作了一个游戏,我决定一个循环等于一个循环的转弯(无限循环)。同样的问题,高性能计算机将

c++ - 通过结构指针将结构的成员初始化为零

typedefstruct{doublefirstArray[3];doublesecondArray[4][4];boolthirdArray[2];}myStruct;我知道我们可以使用intmyArray[10]={0};在一行中将数​​组的所有值初始化为零我有一个函数可以将myStruct中数组的所有元素初始化为零和false(对于bool)。voidinitializeElementsOfStruct(myStruct*str){str->firstArray[0]=0.0;str->firstArray[1]=0.0;str->firstArray[2]=0.0;...}除

c++ - 在 for 循环中声明几个新的计数器

考虑以下代码:vectorv;for(vector::iteratorvi=n.begin(),inti=0;vi!=n.end();++vi,++i){}是否有不允许这样做的原因?我希望能够定义2个新计数器,vi和索引i。 最佳答案 这是C++Primer一书中的解释:Asinanyotherdeclaration,init-statementcandefineseveralobjects.However,init-statementmaybeonlyasingledeclarationstatement.Therefore,al

c++ - 在 c/c++ 中使用 extern 背后的概念是什么?

很抱歉提出此类问题。但是,我对C\C++中的关键字extern非常好奇。在搜索extern的解释时,我了解到extern告诉编译器变量或函数已经在其他文件或程序中定义。但如果是这种情况,那我们为什么要使用extern?因为我尝试了一些代码如下:externintvar;intmain(void){var=10;return0;}这段代码给我的错误消息是unresolvedexternalsymbol"intvar"(?var@@3HA)。如果我使用的代码如下:externintvar;intmain(void){intvar=10;return0;}它没有显示任何错误,并且给出的值与我

c++ - 我应该并行化哪些循环,外部循环还是内部循环

我正在编写图像处理过滤器,我想使用openmp加快计算速度。我的伪代码结构如下:for(everypixelintheimage){//dosomestuffherefor(anycombinationofparameters){//dootherstuffhereandfilter}}代码使用不同的参数过滤每个像素,并选择最佳参数。我的问题是什么更快:在处理器之间并行化第一个循环,或者按顺序访问像素并并行化不同的参数选择。我认为这个问题可能是一个更笼统的问题:什么更快,是为每个线程提供大量操作,还是创建许多操作很少的线程。我现在不关心实现细节,我想我可以用我以前使用openmp的专业

c++ - 在 C/C++ 中使用字符执行算术运算

此C/C++代码如何工作?我理解了其中的大部分内容,但不理解下面指定的部分:c2=(c1>='a'&&c1特别是这部分:('A'+c1-'a')这部分代码在做什么?c1和c2的类型都是char。 最佳答案 代码将小写字符转换为大写。如果字符不是小写,则返回原始字符。表达式('A'+c1-'a')进行转换。c1-a将给出字符在字母表中从0开始的位置。通过将此值添加到A,您将获得c1的大写字母。更新:如果c1是'b'那么表达式c1-'a'将给出1,这是'b'在alphabet'将'A'加1将得到'B'

c++ - 如果缩小分配的内存大小,还要检查 realloc() 吗?

当您调用realloc()时,您应该在将返回的指针分配给作为参数传递给函数的指针之前检查函数是否失败...我一直遵守这条规则。当您确定内存将被截断而不是增加时,是否有必要遵循此规则?我从未见过它失败。只是想知道我是否可以保存一些说明。 最佳答案 realloc可以自行决定将block复制到新地址,而不管新大小是更大还是更小。如果malloc实现需要新分配以“缩小”内存块(例如,如果新大小需要将内存块放在不同的分配池中),这可能是必要的。这在glibcdocumentation中有说明。:Inseveralallocationimpl

c++ - 将 int[][] 分配给 int**

这个问题在这里已经有了答案:HowdoIusearraysinC++?(5个答案)关闭8年前。据我所知,在某些情况下,数组会转换为指向其第一个元素的指针:inta[5];int*p;p=a;按照这种方法并考虑到我可以将数组分配给指针,为什么我不能将二维数组分配给指向指针的指针?inta[5][5];int**q;q=a;但是,我可以将指针数组分配给指向指针的指针:int*p[5];int**q;q=p;如果将数组转换为指向其第一个元素的指针,则在第二个示例中发生q=a时,a应该是指向a[0]的指针,而a[0]应该是指向a[0]的指针[0],对吧?此外,如果我这样做,我不会收到错误:co

c++ - 实现编译时机制检查字符串的唯一性

定义我的问题的最简单方法是我正在尝试实现一种机制来检查是否已经使用了相同的字符串(或一对(数字,字符串))。我希望使用C预处理器以一种巧妙的方式实现这种机制。我还希望这种机制在Debug模式下存在冲突或运行时错误时给我编译错误(通过检查断言)。我们不希望开发人员在添加消息时出错,因为每条消息都应该是唯一的。我知道这可以通过计算哈希或例如crc/md5来完成,但这种机制很容易发生冲突,我需要避免。至关重要的是,每条消息只能使用一次。此机制的示例行为:addMessage(1,"Message1")//OKaddMessage(2,"Message2")//OK...addMessage(